//创建一个服务
// 定义一个接口 /api/users
//读取 db.json文件,向前端返回数据
require('dotenv').config()//调用dotenv插件
const http = require('http');  //引用node.js内部的模块创建服务
const fs = require('fs'); //引用文件系统模块,用于读取db.js文件
const OpenAI = require('openai/client.js');
const { json } = require('stream/consumers');
const { OpenAI } = require('openai');//引入openai
const { log } = require('console');
const openai = new OpenAI({
    baseURL: 'https://api.deepseek.com',
    apiKey: process.env.DEEPSEEK_API_KEY,//防止别人看到key
});

const server = http.createServer(async (req, res) => {
    //req为前端传过来的请求体，包含前端传过来的所有内容
    //以下三行处理跨域
    res.setHeader('Access-Control-Allow-Origin', '*')
    res.setHeader('Access-Control-Allow-Headers', '*')
    res.setHeader('Access-Control-Allow-Methods', '*')
    if (req.url.includes('/api/users')) {  //'/api/users'就是一个接口
        const url = new URL(req.url, `http://${req.headers.host}`)//得到一个完整地址
        const query = url.searchParams.get('name') //获取到了前端传过来的姓名
        if (query == 'all') {//如果前端传过来的参数是all则返回所有的数据
            const data = fs.readFileSync('./db.json', 'utf-8')//utf-8表示要读取文件的编码方式
            const users = JSON.parse(data).users //上一步读取到的数据只是一份字符串
            //这一步就是将他们转换成对象，.user表示读到了users[]这个数组
            res.end(JSON.stringify({
                success: true,
                data: users
            }))  //JSON.stringify是将对象转成字符串，res.end是将数据传给前端
        } else {
            //让deepseek去db.js文件中查找哪一条数据的name属性值等于query
            //将这条数据返回给前端
            const users = await openai.chat.completions.create({
                messages: [
                    { role: "system", content: "你是一个编程高手" },
                    {
                        role: "user",
                        content: `请从当前文件夹下的db.json文件中查抄哪一条数据的name属性值等于
                        ${query},将这条数据读取出来，存放在一个数组中，并返回给我`
                    }
                ],
                model: "deepseek-chat",
            })
            console.log(users);
        }
    }
})
server.listen(3003, () => {  //监听一个3003端口
    console.log('服务启动成功');
})